import java.util.Scanner;

/**
 * @author: gao
 * @create-date: 2025/4/20 22:29
 */

public class Solution {
    public int numDecodings(String s) {
        int n = s.length();
        char[] ch = s.toCharArray();
        int[] dp = new int[n + 1]; // 创建一个动态规划数组，用于存储每个位置的解码方式数量

        //初始化第一个位置
        dp[0] = 1;

        //初始化第二个位置
        if (ch[1 - 1] != '0')
            dp[1] = 1;

        for (int i = 2; i <= n; i++) {
            //单独解码
            if (ch[i - 1] != '0')
                dp[i] += dp[i - 1];

            //结合解码
            int tt = (ch[i - 2] - '0') * 10 + ch[i - 1] - '0';
            if (tt >= 10 && tt <= 26)
                dp[i] += dp[i - 2];
        }
        return dp[n]; // 返回最后一个位置的解码方式数量，即为字符串的总解码方式数量
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            String s = in.nextLine();
            Solution solution = new Solution();
            System.out.println(solution.numDecodings(s));
        }
    }
}